草庐IT

Java BufferedImage 内存消耗

全部标签

java - 为什么会出现堆内存不足异常?

我正在尝试分配一个大矩阵(大约10GB)。我正在使用64位JVM开发64位机器。然后我的进程应该有可用的2^64字节并且我已经将JVM堆大小设置为128G(如果这很重要,我的机器中有16GB的RAM)。我的理解是我应该从操作系统获取内存,不需要的矩阵单元将被操作系统换出。但是我遇到了上述异常。编辑:这就是我定义矩阵的方式:Jama.MatrixA=newMatrix(num_words,num_documents);其中num_words大约为100k,num_documents大约为35k。另外值得一提的是类型是double编辑2:相关标志:-Xms40m-Xmx128g-d64

java - 内存管理递归Java

我正在使用大型ArrayList在Java中输入递归。在一个递归步骤中,我将这个列表分成两个列表,每个列表大小减半,并对两个列表递归地应用相同的方法。但是,由于拆分后我不再需要大列表,因此我想将其从内存中删除。在这里搜索了一段时间后,我想到了这个:publicsome_objectrecursiveMethod(ArrayListlarge_List){//ComputethetwosublistsArrayListlower_half=lowerHalf(large_List);ArrayListupper_half=upperHalf(large_List);//Deletelar

java - 在 map 中存储大量字符串的最有效内存方法是什么?

我想在Map中存储大量字符串,所以MagicObjects可以快速访问。此Map的条目太多,内存已成为瓶颈。假设MagicObjects无法优化,对于这种情况,我可以使用的最有效的map类型是什么?我目前正在使用以下内容:gnu.trove.map.hash.TCustomHashMap 最佳答案 如果您的key足够长并且有很多足够长的通用前缀,那么您可以使用trie来节省内存。(前缀树)数据结构。thisquestion的答案指向trie的几个Java实现。 关于java-在map中存

java - 如何减少 HashMap<String, Integer> 类数据结构的内存使用

在开始解释我的问题之前,我应该说明我不是在寻找增加Java堆内存的方法。我应该严格存储这些对象。我正在努力将大量(5-10GB)的DNA序列及其计数(整数)存储在哈希表中。DNA序列(长度不超过32)由“A”、“C”、“G”、“T”和“N”(未定义)字符组成。众所周知,当在内存中存储大量对象时,与C和C++等低级语言相比,Java的空间效率较差。因此,如果我将此序列存储为字符串(对于长度约为30的序列,它占用大约100MB的内存),我会看到错误。我试图将核酸表示为“A”=00、“C”=01、“G”=10、“T”=11并忽略“N”(因为它破坏了char到2位转换为第5种酸)。然后,将这些

java - 使用 AmazonSQSClient 的消息消耗缓慢

因此,我在springjms50-100中使用并发,允许最大连接数高达200。一切都按预期工作,但如果我尝试从队列中检索100k条消息,我的意思是我的sqs上有100k条消息,我正在读取它们通过springjms正常方式。@JmsListenerPublicvoidprocess(Stringmessage){count++;Println(count);//code}我在我的控制台中看到了所有日志,但在大约17k之后它开始抛出异常类似于:awssdk异常:端口已在使用中。为什么我会看到这个异常以及如何做。我摆脱它?我试着在互联网上寻找它。找不到任何东西。我的设置:并发50-100为每

java - 类管理自己的内存

EffectiveJava:第6条:消除过时的对象引用。Generallyspeaking,wheneveraclassmanagesitsownmemory,theprogrammershouldbealertformemoryleaks.Wheneveranelementisfreed,anyobjectreferencescontainedintheelementshouldbenulledout.我认为我没有完全理解描述。管理自己内存的类的示例有哪些-我可以想到数组、列表,也许还有映射。谁能更详细地解释书中的项目?谢谢 最佳答案

java - 令人困惑的Tomcat持久 session 内存配置文件

与任何内存管理问题一样,这是一个很长的故事,所以请牢牢捕获。我们的应用程序遇到了一些内存管理问题,因此,我一直在尝试对该应用程序进行概要分析,以了解问题出在哪里。我今天早些时候看到了这个线程:TomcatSessionEvictiontoAvoidOutOfMemoryError……似乎跟我在探查器中看到的一样。基本上,如果我用Jmeter吸引了一群用户使用该应用程序,它将长时间保留在堆内存上,最终直到session开始过期为止。但是,与该线程中的发布者不同,我拥有源代码,并且可以尝试使用Tomcat来实现持久状态session,这是我今天一直在尝试的工作,但取得的成功有限。我认为这是

Java 正在分配额外的 2gb 内存

我有一个新的VPS来运行我和一些伙伴制作的一些java程序。我用这样一行开始这个过程:java-Xmx512M-jarprogram.jar在我们的旧VPS上,您可以使用“top”命令查看使用了多少虚拟内存和常驻内存。它会使用600-700mb的虚拟内存。现在在我们的新VPS上,使用相同的命令,虚拟内存似乎总是比-Xmx值多~2gb。因此,虚拟内存不是大约600-700mb,而是2700-3000mb。旧的VPS运行CentOS5.7,新的运行CentOS6.2。两者都运行JRE1.7u364位。为什么会这样,我该如何解决?编辑:顶部PIDUSERPRNIVIRTRESSHRS%CPU

java - 如何减少JVM虚拟内存的使用?

我有一个Java程序可以在具有2GB物理内存和2GB交换空间的Solaris10X86上运行。该程序在Linux64位上运行良好,仅占用约450MB内存。但是当它在Solaris中运行时,它总是报告OutOfMemoryError,我注意到就在错误发生之前,它试图使用>4GB的虚拟内存,这在32位系统上是绝对不可能的。那么为什么JVM会尝试使用那么多的虚拟内存呢?有没有办法告诉JVM不要使用那么多虚拟内存?谢谢。编辑:谢谢大家的意见!这是完整的错误消息:##ThereisinsufficientmemoryfortheJavaRuntimeEnvironmenttocontinue.#

java - 为什么从命令行运行的可执行 jar 比从 Eclipse 运行的同一项目使用更多的内存?

为什么从命令行运行的可执行jar比从Eclipse运行的同一项目使用更多的RAM-在我的例子中大约多7倍?在开发项目时,我从Eclipse(运行->运行)运行应用程序,它使用了大约60mb(我查看了刚刚创建的javaw.exe进程)的ram,而如果我创建一个可执行JAR并从命令运行它行(Windows)ram使用量约为450mb。此外,与从Eclipse的运行->运行相比,从命令行运行时ram使用变化的幅度更大。 最佳答案 这可能与Eclipse启动应用程序时使用的JVM设置有关。启动Jar时,Java将根据内存做出最佳猜测以使用哪